#ifndef _Can_Revice_
#define _Can_Revice_

#include "main.h"
//#define Chassis_Header hcan1
//#define Gimbal_Header hcan2
/*****************电机数据回收结构体********************/ 
typedef struct 
{
	uint16_t ecd; //转子机械角度 0-8191
    int16_t rpm; // 转子转速值 r/min
    int16_t given_current; //当前电流值 -16384-16384
    uint8_t temperate; //Temp/度
    uint16_t last_ecd; //上一次的机械角度
}Revice_Motro;

/*******************MOTORID*******************/ 
#define ALL_CHASSIS_ID 0x200

#define CHASSIS_M1_ID 0x201
#define CHASSIS_M2_ID 0x202
#define CHASSIS_M3_ID 0x203
#define CHASSIS_M4_ID 0x204

#define CHASSIS_MOTOR1 0
#define CHASSIS_MOTOR2 1
#define CHASSIS_MOTOR3 2
#define CHASSIS_MOTOR4 3

#define GIMBAL_MOTOR1 0
#define GIMBAL_MOTOR2 1

#define CAN_GIMBAL_ALL_ID 0x1ff
#define CAN_CATCH_MOTOR_ID  0x205
#define CAN_RISE_FALL_MOTOR_ID  0x206

/*******************外环PID**********************/

//1
#define M2006_MOTOR_1_Outer_PID_MAX_OUT							5000.0f //最大输出角度
#define M2006_MOTOR_1_Outer_PID_MAX_IOUT						2000.0f			
#define M2006_MOTOR_1_Outer_PID_KP                 	0.15
#define M2006_MOTOR_1_Outer_PID_KI                	0.0
#define M2006_MOTOR_1_Outer_PID_KD                 	0.0

//2
#define M2006_MOTOR_2_Outer_PID_MAX_OUT							5000.0f //最大输出角度
#define M2006_MOTOR_2_Outer_PID_MAX_IOUT						2000.0f			
#define M2006_MOTOR_2_Outer_PID_KP                 	0.15
#define M2006_MOTOR_2_Outer_PID_KI                	0.0
#define M2006_MOTOR_2_Outer_PID_KD                 	0.0

//3.0
#define M2006_MOTOR_3_Outer_PID_MAX_OUT							5000.0f //最大输出角度
#define M2006_MOTOR_3_Outer_PID_MAX_IOUT						2000.0f			
#define M2006_MOTOR_3_Outer_PID_KP                 	0.15
#define M2006_MOTOR_3_Outer_PID_KI                	0.0
#define M2006_MOTOR_3_Outer_PID_KD                 	0.0

//4
#define M2006_MOTOR_4_Outer_PID_MAX_OUT							5000.0f //最大输出角度
#define M2006_MOTOR_4_Outer_PID_MAX_IOUT						2000.0f			
#define M2006_MOTOR_4_Outer_PID_KP                 	0.15
#define M2006_MOTOR_4_Outer_PID_KI                	0.0
#define M2006_MOTOR_4_Outer_PID_KD                 	0.0



/*******************内环PID**********************/

//1
//#define M2006_MOTOR_1_Inner_PID_MAX_OUT							2000.0f //最大输出角度
//#define M2006_MOTOR_1_Inner_PID_MAX_IOUT						5000.0f			
//#define M2006_MOTOR_1_Inner_PID_KP                 	1.0
//#define M2006_MOTOR_1_Inner_PID_KI                	0.0
//#define M2006_MOTOR_1_Inner_PID_KD                 	6.0

////2
//#define M2006_MOTOR_2_Inner_PID_MAX_OUT							2000.0f //最大输出角度
//#define M2006_MOTOR_2_Inner_PID_MAX_IOUT						5000.0f			
//#define M2006_MOTOR_2_Inner_PID_KP                  1.0
//#define M2006_MOTOR_2_Inner_PID_KI                	0.0
//#define M2006_MOTOR_2_Inner_PID_KD                 	6.0

////3
//#define M2006_MOTOR_3_Inner_PID_MAX_OUT							2000.0f //最大输出角度
//#define M2006_MOTOR_3_Inner_PID_MAX_IOUT						5000.0f			
//#define M2006_MOTOR_3_Inner_PID_KP                  10
//#define M2006_MOTOR_3_Inner_PID_KI                	0.0
//#define M2006_MOTOR_3_Inner_PID_KD                 	6.0

////4
//#define M2006_MOTOR_4_Inner_PID_MAX_OUT							2000.0f //最大输出角度
//#define M2006_MOTOR_4_Inner_PID_MAX_IOUT						5000.0f			
//#define M2006_MOTOR_4_Inner_PID_KP                 	1.0
//#define M2006_MOTOR_4_Inner_PID_KI                	0.0
//#define M2006_MOTOR_4_Inner_PID_KD                 	6.0


//1
#define M2006_MOTOR_1_Inner_PID_MAX_OUT							5000.0f //最大输出角度
#define M2006_MOTOR_1_Inner_PID_MAX_IOUT						5000.0f			
#define M2006_MOTOR_1_Inner_PID_KP                 	5.0
#define M2006_MOTOR_1_Inner_PID_KI                	0.0
#define M2006_MOTOR_1_Inner_PID_KD                 	6.0

//2
#define M2006_MOTOR_2_Inner_PID_MAX_OUT							5000.0f //最大输出角度
#define M2006_MOTOR_2_Inner_PID_MAX_IOUT						5000.0f			
#define M2006_MOTOR_2_Inner_PID_KP                  5.0
#define M2006_MOTOR_2_Inner_PID_KI                	0.0
#define M2006_MOTOR_2_Inner_PID_KD                 	6.0

//3
#define M2006_MOTOR_3_Inner_PID_MAX_OUT							5000.0f //最大输出角度
#define M2006_MOTOR_3_Inner_PID_MAX_IOUT						5000.0f			
#define M2006_MOTOR_3_Inner_PID_KP                  5.0
#define M2006_MOTOR_3_Inner_PID_KI                	0.0
#define M2006_MOTOR_3_Inner_PID_KD                 	6.0

//4
#define M2006_MOTOR_4_Inner_PID_MAX_OUT							5000.0f //最大输出角度
#define M2006_MOTOR_4_Inner_PID_MAX_IOUT						5000.0f			
#define M2006_MOTOR_4_Inner_PID_KP                 	5.0
#define M2006_MOTOR_4_Inner_PID_KI                	0.0
#define M2006_MOTOR_4_Inner_PID_KD                 	6.0








void CAN_cmd_chassis(int16_t M1, int16_t M2, int16_t M3, int16_t M4);
void canfilter_init_start(void);
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef*hcan);
void CAN_cmd_gimbal(int16_t Rise_Fall, int16_t Catch);

const Revice_Motro *get_gimbal_motor_measure_point(uint8_t i);
const Revice_Motro *get_Chassis_Motor_Measure_Point(uint8_t i);

#endif
